﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;

public partial class Transferencia_Transferencia : Global
{
    private const string TABLATRANSFERENCIA = "TABLATRANSFERENCIA";

    private bool Inicio
    {
        get { return (bool)ViewState["_Inicio"]; }
        set { ViewState["_Inicio"] = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Inicio = false;
            Session[TABLATRANSFERENCIA] = null;
        }
    }


    protected void Timer_Tick(object sender, EventArgs e)
    {
        this.Tick();
    }

    private void Tick()
    {
        try
        {
            //Timer.Enabled = true;
            lblTimer.Text = DateTime.Now.ToLongTimeString();
            sdsRecepcion.SelectParameters["p_Tipo"].DefaultValue = "2";
            sdsRecepcion.SelectParameters["p_IDTransferencia"].DefaultValue = this.lblRecepcion.Text;            

            //Si se esta leyendo rfid, se hace distinct de la columna LECTURA
            DataTable dtLectura = new DataTable();
            if (rblOpcion.SelectedValue.ToString() == "2")
            {
                DataTable dtTemp = ((DataView)sdsRecepcion.Select(DataSourceSelectArguments.Empty)).Table;
                dtLectura = dtTemp.DefaultView.ToTable(/*distinct*/true);
            }
            else
            {
                dtLectura = ((DataView)sdsRecepcion.Select(DataSourceSelectArguments.Empty)).Table;
            }


            this.grdRecepcion.DataSource = dtLectura;
            this.grdRecepcion.DataBind();

            Session[TABLATRANSFERENCIA] = dtLectura;
        }
        catch (Exception EX)
        {
            oGDataBlocks.RegistraError(0, 0, "Transferencia - Error 3: " + EX.Message);
        }    
    }

    protected void btnDetener_Click(object sender, EventArgs e)
    {
        this.Detener();
    }

    protected void btnIniciar_Click(object sender, EventArgs e)
    {
        if (rblOpcion.SelectedValue.ToString() == "1")
            tblSerial.Visible = true;
        else
            tblSerial.Visible = false;

        try
        {
            this.lblUltima.Text = "Numero de Transferencia: ";
            Inicio = true;
            this.rblOpcion.Enabled = false;
            sdsRecepcion.SelectParameters["p_IDUsuario"].DefaultValue = UsrID(Context).ToString();
            sdsRecepcion.SelectParameters["p_Tipo"].DefaultValue = "1";
            DataView dtvRecepcion = (DataView)sdsRecepcion.Select(DataSourceSelectArguments.Empty);

            this.lblRecepcion.Text = dtvRecepcion.Table.Rows[0][0].ToString();
            this.txtObservacion.ReadOnly = true;            

            //Trae ip del reader
            string ipTransferencia = oGDataBlocks.GetValorConfiguracion("IPREADERTRANSFERENCIA");
            oGReaderTransferencia.ip = ipTransferencia;

            if (rblOpcion.SelectedValue.ToString() == "2")
            {
                oGReaderTransferencia.start(5, System.Convert.ToInt32(this.lblRecepcion.Text), System.Convert.ToInt32(this.rblOpcion.SelectedValue));
                Timer.Enabled = true;
            }
            else
                this.txtSerial.Enabled = true;

            this.lblInicio.Text = DateTime.Now.ToLongTimeString();
            this.btnIniciar.Enabled = false;

        }
        catch (Exception EX)
        {
            oGJS.ScriptAlert("CEDIS - Ocurrio un error en el sistema: " + EX.Message, false, Page);
            //oGDataBlocks.RegistraError(0, 0, "Recepción - Error 2: " + EX.Message);
        }
    }

    private void GuardarCodigoBarras()
    {
        Global oGGlobal = new Global();
        string codigo = this.hdn.Value;
        if (!codigo.Equals(System.DBNull.Value))
        {
            //Construye xml con los codigos que llegan
            StringBuilder xml = new StringBuilder();
            xml.Append("<TAGS>");
            String[] separador = { ";" };
            String[] arreglo = codigo.Split(separador, StringSplitOptions.None);
            string ean13;
            string ean14;
            for (int i = 0; i < arreglo.Length; i++)
            {
                ean13 = "";
                ean14 = "";
                try
                {
                    if (arreglo[i].Length >= 12)
                    {
                        //Si son 14 digitos se leyo un EAN14
                        if (arreglo[i].Length == 14)
                        {
                            //ean13 = arreglo[i].Substring(1, 12);
                            ean14 = arreglo[i];
                        }
                        else
                        {
                            ean13 = arreglo[i].Substring(0, 12);
                            //ean14 = oGEPC.GetEAN14(ean13);
                        }

                        if (ean13.Length == 12)
                            ean13 = ean13 + oGEPC.CalcularDigitoControl("EAN13", ean13);

                        xml.Append("<LECTURA VALOR='" + arreglo[i] + "' EAN13='" + ean13 + "' EPC='' EAN14='" + ean14 + "' />");
                    }
                }
                catch
                {
                }
            }
            xml.Append("</TAGS>");

            if (xml.Length > 15)
            {
                try
                {
                    DataBlocks oGDataBlocks = new DataBlocks();
                    oGDataBlocks.InsertaLectura(xml.ToString(), 5, System.Convert.ToInt32(this.lblRecepcion.Text), 1);
                    this.hdn.Value = "";
                }
                catch (Exception ex)
                {
                    oGJS.ScriptAlert("NO se insertó lo leído: " + ex.Message, false, Page);
                }
            }
        }

    }
   
    protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
    {
        //No se hace nada en este evento, simplemente se declara el evento para que atrape el error
        //y no lo muestre al usuario. No se hace nada porque todo esta funcionando OK, pero a veces
        //las llamadas asincronas generan este error
        ScriptManager1.AsyncPostBackErrorMessage = "";
        //if (e.Exception.Data["ExtraInfo"] != null)        
        //    ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message + e.Exception.Data["ExtraInfo"].ToString();        
        //else
        //    ScriptManager1.AsyncPostBackErrorMessage = "An unspecified error occurred.";

    }

    private void Detener()
    {
        if (Inicio)
        {
            tblSerial.Visible = false;
            this.txtObservacion.Text = string.Empty;
            this.txtObservacion.ReadOnly = false;
            this.txtSerial.Enabled = false;
            this.rblOpcion.Enabled = true;
            this.btnIniciar.Enabled = true;
            this.lblInicio.Text = string.Empty;
            this.lblUltima.Text = "Ultima Transferencia: ";
            this.lblTimer.Text = string.Empty;
            this.grdRecepcion.DataSource = null;
            this.grdRecepcion.DataBind();
            Timer.Enabled = false;

            if (rblOpcion.SelectedValue.ToString() == "2")
                oGReaderTransferencia.stop();
            //else
            //    this.GuardarCodigoBarras();

            //this.GenerarArchivo();

            oGJS.OpenWindow("Ubicacion", "Ubicacion.aspx?ID=" + this.lblRecepcion.Text, "Ubicacion", "width=550, height=300,center=yes,toolbar=no,status=yes,menubar=no,scrollbars=yes,top=200,left=280,dependent=yes,alwaysRaised=yes", "", Page);
        }
        else
            oGJS.ScriptAlert("Para detener el proceso debe iniciarlo", false, Page);
    }

    protected void txtSerial_TextChanged(object sender, EventArgs e)
    {
        try
        {
            StringBuilder xml = new StringBuilder();
            xml.Append("<TAGS>");
            string ean13 = "";
            string ean14 = "";
            if (this.txtSerial.Text.Length >= 12)
            {
                if (this.txtSerial.Text.Length == 14)
                    ean14 = this.txtSerial.Text;
                else
                    ean13 = this.txtSerial.Text.Substring(0, 12);

                if (ean13.Length == 12)
                    ean13 = ean13 + oGEPC.CalcularDigitoControl("EAN13", ean13);

                xml.Append("<LECTURA VALOR='" + this.txtSerial.Text + "' EAN13='" + ean13 + "' EPC='' EAN14='" + ean14 + "' />");
            }
            xml.Append("</TAGS>");

            if (xml.Length > 15)
            {
                oGDataBlocks.InsertaLectura(xml.ToString(), 5, System.Convert.ToInt32(this.lblRecepcion.Text), 1);                
                this.txtSerial.Text = "";
                this.Tick();
            }

        }
        catch (Exception ex)
        {
            oGDataBlocks.RegistraError(0, 0, "Transferencia - Error al guardar codigo de barras: " + ex.Message);
        }

    }
}